﻿using Rhino.Geometry;
using Rhino.Input;
using Rhino.Input.Custom;
using System;
using System.Collections.Generic;

namespace YangTools.RhinoHelper
{
    class UserInterface
    {

        // GetPoints
        /// <summary>
        /// 在Rhino中选择一个点
        /// </summary>
        /// <returns>List<Point3d> 由 Point3d 组成的集合，如果没有选中物体，将返回一个个数为0的空集合</returns>
        public static List<Point3d> GetPoint()
        {
            return GetPoint("");
        }
        /// <summary>
        /// 在Rhino中选择一个点
        /// </summary>
        /// <param name="message">命令行提示信息</param>
        /// <returns>List<Point3d> 由 Point3d 组成的集合，如果没有选中物体，将返回一个个数为0的空集合</returns>
        public static List<Point3d> GetPoint(string message)
        {
            return GetPoint(message, null);
        }
        /// <summary>
        /// 在Rhino中选择一个点
        /// </summary>
        /// <param name="message">命令行提示信息</param>
        /// <param name="dynamicDraw">是否在获取点时动态绘制</param>
        /// <returns>List<Point3d> 由 Point3d 组成的集合，如果没有选中物体，将返回一个个数为0的空集合</returns>
        public static List<Point3d> GetPoint(string message, EventHandler<GetPointDrawEventArgs> dynamicDraw)
        {
            List<Point3d> point = new List<Point3d>();

            GetPoint getPoint = new GetPoint();
            if (message != null) getPoint.SetCommandPrompt(message);
            if (dynamicDraw != null) getPoint.DynamicDraw += dynamicDraw;

            GetResult getResult = getPoint.Get();
            if (getResult == GetResult.Point)
            {
                point.Add(getPoint.Point());
            }
            getPoint.Dispose();
            return point;
        }


        // GetString
        /// <summary>
        /// 让用户在 Rhino 的命令行输入字符串
        /// </summary>
        /// <returns>返回获取到的字符串</returns>
        public static string GetString()
        {
            return GetString("");
        }
        /// <summary>
        /// 让用户在 Rhino 的命令行输入字符串
        /// </summary>
        /// <param name="message">命令行提示信息</param>
        /// <returns>返回获取到的字符串</returns>
        public static string GetString(string message)
        {
            GetResult r;
            return GetString(message, out r);
        }
        /// <summary>
        /// 让用户在 Rhino 的命令行输入字符串
        /// </summary>
        /// <param name="message">命令行提示信息</param>
        /// <param name="getResult">输出参数（GetResult）：输出获取的结果</param>
        /// <returns>返回获取到的字符串</returns>
        public static string GetString(string message, out GetResult getResult)
        {
            return GetString(message, out getResult, true);
        }
        /// <summary>
        /// 让用户在 Rhino 的命令行输入字符串
        /// </summary>
        /// <param name="message">命令行提示信息</param>
        /// <param name="getResult">输出参数（GetResult）：输出获取的结果</param>
        /// <param name="acceptNothing">是否允许什么都不输入，直接回车确认</param>
        /// <returns>返回获取到的字符串，如果没有则返回空字符串</returns>
        public static string GetString(string message, out GetResult getResult, bool acceptNothing)
        {
            GetString getString = new GetString();
            getString.SetCommandPrompt(message);
            getString.AcceptNothing(acceptNothing); // 允许什么都不输入

            getResult = getString.Get();
            string resultText = "";
            if (getResult==GetResult.String)
            {
                resultText = getString.StringResult();
            }
            getString.Dispose(); // 不能先释放资源，要先获取结果，否则结果就被释放了

            return resultText;
        }

    }
}
